package com.welink.admin.genertor;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.Collections;


/**
 *
 * @description: 代码生成器
 * @author: gaorui
 * @create: 2021-11-22 20:23
 * @version: Copyright (c) 2021,All Rights Reserved.
 **/

public class CodeGenerator {

    public static void main(String[] args) {
        // 数据源配置
        String url = "jdbc:mysql://175.178.20.40:3306/welink?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "root";

        // 使用 FastAutoGenerator 新API
        FastAutoGenerator.create(url, username, password)
                // 全局配置
                .globalConfig(builder -> {
                    builder.author("welink") // 设置作者
                            .outputDir(System.getProperty("user.dir") + "/src/main/java") // 指定输出目录
                            .enableSwagger() // 开启 swagger 模式（可选）
                            .disableOpenDir(); // 禁止打开输出目录
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.parent("com.welink.admin") // 设置父包名
                            //.moduleName("system") // 设置父包模块名（可选）
                            .pathInfo(Collections.singletonMap(OutputFile.xml,
                                    System.getProperty("user.dir") + "/src/main/resources/mapper")); // 设置mapperXml生成路径
                })
                // 策略配置
                .strategyConfig(builder -> {
                    builder.addInclude("sys_user") // 设置需要生成的表名
                            .addTablePrefix("t_", "sys_") // 设置过滤表前缀
                            // 实体策略配置
                            .entityBuilder()
                            .enableLombok() // 开启Lombok
                            .naming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
                            .columnNaming(NamingStrategy.underline_to_camel) // 数据库表字段映射到实体的命名策略
                            // controller策略配置
                            .controllerBuilder()
                            .enableRestStyle() // 开启生成@RestController控制器
                            // service策略配置
                            .serviceBuilder()
                            .formatServiceFileName("%sService") // 去除Service接口的首字母I
                            // mapper策略配置
                            .mapperBuilder()
                            .enableMapperAnnotation(); // 开启@Mapper注解
                })
                // 模板引擎配置（默认使用Velocity，可以改为Freemarker）
                .templateEngine(new VelocityTemplateEngine())
                .execute();
    }
}

